/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.gob.pnp.digitalizar.despachadores;

import java.sql.*;
import java.util.*;
import java.util.ArrayList;
import pe.gob.pnp.digitalizar.beans.*;
import pe.gob.pnp.factories.*;
import pe.gob.pnp.libreria.Utiles;

/**
 *
 * @author Eduardo
 */
public class DocumentoDespachador {

    public static List<DocumentoDigitalizadoBean> obtenerFoliosPorDocumentos(ExpedienteBean expediente) throws SQLException {
        List<DocumentoDigitalizadoBean> documentos = new ArrayList<DocumentoDigitalizadoBean>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT DD.NDODI_IDENTIFICADOR, DD.NTIDO_IDENTIFICADOR, DD.CDODI_DESCRIPCION, TD.CTIDO_DESCRIPCION, COUNT(*) AS FOLIOS,";
            sql += " case when (select count(*) from DIGMA_INDEXADO i where i.NDODI_IDENTIFICADOR=DD.NDODI_IDENTIFICADOR) > 0 then 1 else 0 end as INDEXADO";
            sql += " FROM DIGMA_FOLIO F";
            sql += " INNER JOIN  DIGMA_DOCUMENTODIGITALIZADO DD";
            sql += " ON DD.NDODI_IDENTIFICADOR=F.NDODI_IDENTIFICADOR";
            sql += " AND DD.BDODI_ELIMINADO=0";
            sql += " INNER JOIN SISMA_TIPODOCUMENTO TD";
            sql += " ON TD.NTIDO_IDENTIFICADOR=DD.NTIDO_IDENTIFICADOR";
            sql += " AND TD.BTIDO_ELIMINADO=0";
            sql += " WHERE F.BFOLI_ELIMINADO=0";
            sql += " AND DD.NEXPE_IDENTIFICADOR=?";
            sql += " GROUP BY DD.NDODI_IDENTIFICADOR, DD.NTIDO_IDENTIFICADOR, DD.CDODI_DESCRIPCION, TD.CTIDO_DESCRIPCION";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, expediente.getId());
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                DocumentoDigitalizadoBean documento = new DocumentoDigitalizadoBean();
                documento.setId(rs.getInt("NDODI_IDENTIFICADOR"));
                documento.setDescripcion(rs.getString("CDODI_DESCRIPCION"));
                documento.setIdTipoDocumento(rs.getInt("NTIDO_IDENTIFICADOR"));
                documento.setDescripcionTipoDocumento(rs.getString("CTIDO_DESCRIPCION"));
                documento.setNroFolios(rs.getInt("FOLIOS"));
                documento.setIndexado(rs.getInt("INDEXADO"));
                documentos.add(documento);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return documentos;
    }

    public static List<FolioBean> obtenerFolios(ExpedienteBean expediente) throws SQLException {
        List<FolioBean> folios = new ArrayList<FolioBean>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT F.NFOLI_IDENTIFICADOR,F.NFOLI_PAGINA, DD.CDODI_DESCRIPCION,";
            sql += " DD.NDODI_IDENTIFICADOR, DD.NTIDO_IDENTIFICADOR";
            sql += " FROM DIGMA_FOLIO F";
            sql += " INNER JOIN DIGMA_DOCUMENTODIGITALIZADO DD";
            sql += " ON DD.NDODI_IDENTIFICADOR=F.NDODI_IDENTIFICADOR";
            sql += " AND DD.BDODI_ELIMINADO=0";
            sql += " WHERE DD.NEXPE_IDENTIFICADOR=?";
            sql += " AND F.BFOLI_ELIMINADO=0";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, expediente.getId());
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                FolioBean folio = new FolioBean();
                DocumentoDigitalizadoBean documento = new DocumentoDigitalizadoBean();
                documento.setId(rs.getInt("NDODI_IDENTIFICADOR"));
                documento.setDescripcion(rs.getString("CDODI_DESCRIPCION"));
                documento.setIdTipoDocumento(rs.getInt("NTIDO_IDENTIFICADOR"));
                folio.setDocumento(documento);
                folio.setId(rs.getInt("NFOLI_IDENTIFICADOR"));
                folio.setPagina(rs.getInt("NFOLI_PAGINA"));
                folios.add(folio);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return folios;
    }

    public static List<TipoDocumentoBean> obtenerTiposDocumentos(int otros) throws SQLException {
        List<TipoDocumentoBean> tipos = new ArrayList<TipoDocumentoBean>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT NTIDO_IDENTIFICADOR,CTIDO_DESCRIPCION";
            sql += " FROM SISMA_TIPODOCUMENTO";
            sql += " WHERE BTIDO_ELIMINADO=0";
            sql += " AND NTIDO_IDENTIFICADOR<>?";
            sql += " ORDER BY CTIDO_DESCRIPCION";

            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, otros);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                TipoDocumentoBean tipo = new TipoDocumentoBean();
                tipo.setId(rs.getInt("NTIDO_IDENTIFICADOR"));
                tipo.setDescripcion(rs.getString("CTIDO_DESCRIPCION"));
                tipos.add(tipo);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return tipos;
    }

    public static void modificarFolio(FolioBean folio, int usuario) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "UPDATE DIGMA_FOLIO";
            sql += " SET NDODI_IDENTIFICADOR=?,";
            sql += " NUSUA_IDENTIFICADOR=?";
            sql += " WHERE NFOLI_IDENTIFICADOR=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, folio.getDocumento().getId());
            ps.setInt(2, usuario);
            ps.setInt(3, folio.getId());
            ps.executeUpdate();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static List<FolioBean> obtenerFolios(DocumentoDigitalizadoBean documento) throws SQLException {
        List<FolioBean> folios = new ArrayList<FolioBean>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT NFOLI_IDENTIFICADOR,NFOLI_PAGINA,CFOLI_NOMBREARCHIVO";
            sql += " FROM DIGMA_FOLIO";
            sql += " WHERE NDODI_IDENTIFICADOR=?";
            sql += " AND BFOLI_ELIMINADO=0";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, documento.getId());
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                FolioBean folio = new FolioBean();
                folio.setId(rs.getInt("NFOLI_IDENTIFICADOR"));
                folio.setPagina(rs.getInt("NFOLI_PAGINA"));
                folio.setNombreArchivo(rs.getString("CFOLI_NOMBREARCHIVO"));
                folios.add(folio);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return folios;
    }

    public static void obtenerDocumentoOtros(DocumentoDigitalizadoBean documento) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT NDODI_IDENTIFICADOR";
            sql += " FROM DIGMA_DOCUMENTODIGITALIZADO";
            sql += " WHERE NEXPE_IDENTIFICADOR=?";
            sql += " AND NTIDO_IDENTIFICADOR=?";
            sql += " AND BDODI_ELIMINADO=0";
            PreparedStatement ps = conn.prepareCall(sql);
            ps.setInt(1, documento.getIdExpediente());
            ps.setInt(2, documento.getIdTipoDocumento());
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                documento.setId(rs.getInt("NDODI_IDENTIFICADOR"));
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }


   ///
    public static String obtenerSiguienteExpediente(int tipo) throws SQLException {
        Connection conn = null;
        String res = "" ;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT LPAD(NVL(MAX(nnuex_valoractual),0)+1,6,'0')  as siguiente";
            sql += " FROM sisma_numeracionexpediente ";
            sql += "  where NTIPP_IDENTIFICADOR  = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, tipo);
            ResultSet rs = ps.executeQuery();
            while (rs.next()){                
                res = (rs.getString("siguiente"));
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return res;
    }

    public static void actaulizaSiguienteExpediente(int tipo) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "update sisma_numeracionexpediente ";
            sql += " set nnuex_valoractual  = nnuex_valoractual + 1 ";
            sql += "  where NTIPP_IDENTIFICADOR  = ?";
            System.out.println("SQL = " + sql + "   " + tipo );
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, tipo);
            ps.executeUpdate();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static List<FolioBean> obtenerFoliosPorIdDocumento(int idDocumento) throws SQLException {
        List<FolioBean> folios = new ArrayList<FolioBean>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT NFOLI_IDENTIFICADOR";
            sql += " FROM DIGMA_FOLIO";
            sql += " WHERE NDODI_IDENTIFICADOR=?";
            sql += " AND BFOLI_ELIMINADO=0";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, idDocumento);
            ResultSet rs = ps.executeQuery();
            while (rs.next()){
                FolioBean folio = new FolioBean();
                folio.setId(rs.getInt("NFOLI_IDENTIFICADOR"));
                folios.add(folio);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return folios;
    }

    public static void eliminarDocumento(int idDocumento, int idUsuario) throws SQLException{
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "UPDATE DIGMA_DOCUMENTODIGITALIZADO";
            sql += " SET BDODI_ELIMINADO=1,";
            sql += " NUSUA_IDENTIFICADOR=?";
            sql += " WHERE NDODI_IDENTIFICADOR=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, idUsuario);
            ps.setInt(2, idDocumento);
            ps.executeUpdate();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }

    public static void eliminarFolio(int idFolio, int idUsuario) throws SQLException {
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "UPDATE DIGMA_FOLIO";
            sql += " SET BFOLI_ELIMINADO=1,";
            sql += " NUSUA_IDENTIFICADOR=?";
            sql += " WHERE NFOLI_IDENTIFICADOR=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, idUsuario);
            ps.setInt(2, idFolio);
            ps.executeUpdate();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }
}
